package entities;

import java.io.Serializable;
import java.util.Calendar;
import java.util.LinkedList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.CollectionOfElements;

import entities.vo.FacturaVO;
import entities.vo.ItemFacturaVO;

@Entity
public class Factura implements Serializable {
	private static final long serialVersionUID = 1L;
	
	private int nroFactura;
	private Long fecha;
	private String tipo;
	@CollectionOfElements
	private List<ItemFactura> items;
	private String tipoIva;
	private String condicionPago;
	private String remito;
	private float ingresosBrutos;
	private String cuit;
	
	public Factura() {
		items = new LinkedList<ItemFactura>();
	}

	@Id
	public int getNroFactura() {
		return nroFactura;
	}


	public void setNroFactura(int nroFactura) {
		this.nroFactura = nroFactura;
	}


	public Long getFecha() {
		return fecha;
	}


	public void setFecha(Long fecha) {
		this.fecha = fecha;
	}


	public String getTipo() {
		return tipo;
	}


	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
	
	
	//@OneToMany(/*mappedBy="ofad",*/targetEntity=entities.ItemFactura.class, fetch=FetchType.EAGER)
	//@JoinTable(name="Factura_ItemFactura")
	@OneToMany(cascade=CascadeType.ALL,mappedBy="factura")	
	public List<ItemFactura> getItems() {
		return items;
	}


	public void setItems(List<ItemFactura> items) {
		this.items = items;
	}

	public String getTipoIva() {
		return tipoIva;
	}

	public void setTipoIva(String tipoIva) {
		this.tipoIva = tipoIva;
	}

	public String getCondicionPago() {
		return condicionPago;
	}

	public void setCondicionPago(String condicionPago) {
		this.condicionPago = condicionPago;
	}

	public String getRemito() {
		return remito;
	}

	public void setRemito(String remito) {
		this.remito = remito;
	}

	public float getIngresosBrutos() {
		return ingresosBrutos;
	}

	public void setIngresosBrutos(float ingresosBrutos) {
		this.ingresosBrutos = ingresosBrutos;
	}

	public String getCuit() {
		return cuit;
	}

	public void setCuit(String cuit) {
		this.cuit = cuit;
	}

	public void setFacturaVO(FacturaVO facturaVO) {
		setCondicionPago(facturaVO.getCondicionPago());
		setCuit(facturaVO.getCuit());
		setFecha(facturaVO.getFecha());
		setIngresosBrutos(facturaVO.getIngresosBrutos());
		setNroFactura(facturaVO.getNroFactura());
		setRemito(facturaVO.getRemito());
		setTipo(facturaVO.getTipo());
		setTipoIva(facturaVO.getTipoIva());
		for (ItemFacturaVO itemVO : facturaVO.getItems()) {
			ItemFactura item = new ItemFactura(this);
			item.setItemFacturaVO(itemVO);
			addItemFactura(item);
		}
		
	}

	private void setFecha(Calendar calendar) {
		if(calendar!=null){
			fecha = calendar.getTimeInMillis();
		}
		
	}

	private void addItemFactura(ItemFactura item) {
		items.add(item);		
	}
	
}
